winbrew_engines\windows\msix/
remove.rs

1//! MSIX removal implementation.
2//!
3//! This adapter expects the installed package receipt to contain
4//! `EngineMetadata::Msix`. It extracts the stored package full name and passes
5//! it to `crate::windows_dep::packages::msix_remove`.
6//!
7//! The module does not query the registry or derive package identity on its
8//! own. That information must already be present in the receipt.
9
10use anyhow::{Context, Result, bail};
11
12use crate::models::install::engine::EngineMetadata;
13use crate::models::install::installed::InstalledPackage as WinbrewPackage;
14
15use crate::windows_dep::packages::msix_remove;
16
17/// Remove an MSIX package using the package full name stored in the receipt.
18///
19/// Returns an error when the installed package does not carry MSIX metadata or
20/// when Windows rejects the uninstall call.
21pub(crate) fn remove(package: &WinbrewPackage) -> Result<()> {
22    let package_full_name = match package.engine_metadata.as_ref() {
23        Some(EngineMetadata::Msix {
24            package_full_name, ..
25        }) => package_full_name,
26        _ => bail!("missing msix receipt metadata for '{}'", package.name),
27    };
28
29    msix_remove(package_full_name)
30        .with_context(|| format!("msix uninstall failed for {package_full_name}"))?;
31
32    Ok(())
33}